package main

import (
	"fmt"
	"time"
)

/*
可以通过内置的close()函数关闭channel（如果你的管道不往里存值或者取值的时候一定记得关闭管道）
如果不关闭可能会死锁

1.对一个关闭的通道再发送值就会导致panic。
2.对一个关闭的通道进行接收会一直获取值直到通道为空。
3.对一个关闭的并且没有值的通道执行接收操作会得到对应类型的零值。
4.关闭一个已经关闭的通道会导致panic。
*/
func main() {
	c := make(chan int)
	//使用另外一个线程执行匿名函数
	go func() {
		//给通道发送一千条数据
		for i := 0; i < 1000; i++ {
			c <- i
		}
		close(c) //关闭channel
	}()
	for {
		if data, ok := <-c; ok {
			fmt.Println(data)
		} else {
			break
		}
	}
	time.Sleep(5 * time.Second)
	fmt.Println("main结束")
}
